package com.sailing.xjpb.common.web;


import com.sailing.xjpb.common.exception.AssertException;
import com.sailing.xjpb.common.exception.ReflectException;

/**
 * 参照BUSINESS_ERROR异常码说明 系统异常码定义
 * </p>
 * 1000-成功|2xxx-服务异常（为了保留以前版本定义的异常码）|3xxx-业务异常|4xxx-远程调用第三方接口异常|5xxx-第三次调用我们系统出错时的业务码|6xxx-网关异常
 * </p>
 * 9999-系统未知异常：一般是全局异常处理器中，处理@ExceptionHandler(value = Exception.class)
 * </p>
 * 需要定义更详细的异常，可以扩展对应的异常码
 *
 * @author YaoWei
 * createDate: 2020-12-08
 */
public enum ResponseCode {
    /**
     * 成功
     */
    SUCCESS(1000, "成功"),

    /**
     * 系统异常
     */
    SYSTEM_ERROR(9999, "系统未知异常"),

    /**
     * 服务异常
     */
    CUSTOM_ERROR(2001, "服务异常"),

    /**
     * 转换异常
     */
    CONVERSION_ERROR(2002, "转换异常"),
    /**
     * 如果业务系统自行定义了更详细的异常-可以继承BusinessException，扩展业务码，如B_3103->对应的异常AuthorizeException
     */
    BUSINESS_ERROR(3000, "业务异常"),

    /**
     * 非法请求参数-badRequest
     */
    B_3101(3101, "非法请求参数!"),

    /**
     * 请求参数校验异常-validateException
     */
    B_3102(3102, "请求参数校验异常!"),

    /**
     * access token无效或过期
     */
    B_3103(3103, "access token无效或过期!"),

    /**
     * 无权限访问
     */
    B_3105(3105, "访问权限受限!"),

    /**
     * 文件上传异常
     */
    B_3106(3106, "文件上传异常!"),

    /**
     * 文件下载异常
     */
    B_3107(3107, "文件下载异常!"),
    /**
     * es异常
     */
    B_3108(3108, "es出错!"),
    /**
     * 断言异常 {@linkplain AssertException}
     */
    B_3109(3109, "断言异常！"),
    /**
     * java反射异常 {@linkplain ReflectException}
     */
    B_3110(3110, "java反射异常！"),
    /**
     * 內部服务调用异常！
     */
    B_3111(3111, "內部服务调用异常！"),
    /**
     * sql解析出错！
     */
    B_3112(3112, "sql解析出错！"),
    /**
     * Neo4j cql 查询出错！
     */
    B_3113(3113, "cql查询出错"),
    /**
     * 调用第三方接口出错
     */
    T_4000(4000, "远程服务错误!"),

    /**
     * 调用海康第三方接口出错
     */
    T_4001(4001, "海康远程服务错误!"),

    /**
     * 调用华为第三方接口出错
     */
    T_4002(4002, "华为远程服务错误!"),

    /**
     * 第三方调用我们系统-非法请求
     */
    T_5001(5001, "非法请求!"),

    /**
     * 第三方调用我们系统-IP请求频次超过上限
     */
    T_5002(5002, "IP请求频次超过上限!"),

    /**
     * 第三方调用我们系统-用户请求频次超过上限
     */
    T_5003(5003, "用户请求频次超过上限!"),

    /**
     * 网关服务异常
     */
    G_6000(6000, "网关服务异常!");

    /**
     * 返回代码
     */
    private int code;
    /**
     * 返回信息
     */
    private String message;

    ResponseCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int code() {
        return this.code;
    }

    public int getCode() {
        return code;
    }


    public String getMessage() {
        return message;
    }

    public String msg() {
        return this.message;
    }

}
